#pragma once
#include "cgzCTcpS.h"

class cgzCTcpWS;
class cgzCSendWS : public cgzCSendS
{
public:
    friend class cgzCTcpWS;
    cgzCSendWS(
        const int ufd,
        const char *data,
        const int len,
        int t = WEBSOCKET_SEND_HAND,
        const char *reason = nullptr);

    cgzCSendWS(
        const int ufd,
        const int mid,
        const int len,
        const long cid);
    virtual ~cgzCSendWS();
};

class cgzCRecvWS : public cgzCRecvS
{
public:
    friend class cgzCTcpWS;
    cgzCRecvWS(
        const char *data,
        const int len,
        const int ufd,
        const int fd,
        int t);
    virtual ~cgzCRecvWS();

public:
    int rt;
};

class cgzCTcpWS : public cgzCTcpS
{
public:
    cgzCTcpWS(cgzCThreadPool *pool, const char *name, const std::string ip, const int port, const int cid);
    virtual ~cgzCTcpWS();

public:
    bool connect(int fd, bool is_hand) override;
    bool handshake(cgzCTcpFd *fdinfo) override;
    bool sticking(cgzCTcpFd *fdinfo) override;

protected:
    virtual bool decodeProc(cgzCTcpFd *fdinfo, cgzCWDecode &de);

private:
    cgzCWDecode *m_pDecodeWS;
};

/*
1000: 正常关闭。
1001: 服务器正在关闭。
1002: 协议错误。
1003: 收到不支持的数据类型。
1004: 保留状态码。
1005: 没有状态码（保留）。
1006: 连接异常关闭（保留）。
1007: 收到不一致的数据。
1008: 违反政策。
1009: 消息过大。
1010: 客户端期望的扩展未被提供。
1011: 服务器遇到意外情况。
*/